package com.czh.mybatisplus.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.czh.mybatisplus.Enum.sexEnum;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 
 * </p>
 *
 * @author czh
 * @since 2024-09-19
 */
@TableName("tb_user")
@NoArgsConstructor
@AllArgsConstructor
@Data
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * id
     * 主键生成策略
     * @TableId(value = "id",type = IdType.AUTO)
     *
     * IdType.AUTO:数据库主键自增(确保数据库设置了 主键自增 否则无效)
     * 1.使用数据库自带的主键自增值
     * 2.数据库自增的主键值会回填到实体类中
     * 3.数据库服务端生成的
     *
     * IdType.ASSIGN_ID:主键类型为number类型或数字类型String
     * 1.MP客户端生成的主键值
     * 2.生成的主键值是数字形式的字符串
     * 3.主键对应的类型可以是数字类型或者数字类型的字符串
     * 4.底层基于雪花算法，让数据库的唯一标识也参与id的生成运算，保证id在分布式环境下，全局唯一（避免id的主键冲突问题）
     *
     * IdType.ASSIGN_UUID:主键类型为 string（包含数字和字母组成）
     * 1.生成的主键值包含数字和字母组成的字符串；
     * 2.注意事项：如果数据库中主键值是number类型的，可不可用
     */
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "id")
    private Long id;

    /**
     * 名称
     */
    @ApiModelProperty(value = "名称")
    private String name;

    /**
     * 年龄
     */
    @ApiModelProperty(value = "年龄",example = "0")
    private Integer age;

    /**
     * 性别
     */
    @ApiModelProperty(value = "性别（0，女，1：男）",example = "0")
    private sexEnum sex;

    /**
     * 联系方式
     */
    @ApiModelProperty(value = "联系方式")
    private String phone;

    /**
     * 收货地址
     */
    @TableField(value = "addRess")
    @ApiModelProperty(value = "收货地址")
    private String addRess;

    /**
     * 创建时间
     */
    @TableField(value = "creationTime",fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间（yyyy-MM-dd HH:mm:ss）",hidden = true)
    private LocalDateTime creationTime;

    /**
     * 更新时间
     */
    @TableField(value = "updateTime",fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间（yyyy-MM-dd HH:mm:ss）",hidden = true)
    private LocalDateTime updateTime;

    /**
     * 版本号
     */
    @Version
    @ApiModelProperty(value = "版本号",example = "1")
    private Integer version;

    /**
     * 删除（0：未删除，1：删除）
     * @TableLogic逻辑删除注解
     */
    @ApiModelProperty(value = "删除（0：未删除，1：删除）",example = "0")
    @TableLogic
    private Integer deleted;

}
